[ week 4 ] HTTP協定


Posted by vick12052002 on 2020-07-15

HTTP 是什麼

超文本傳輸協定(英語:HyperText Transfer Protocol,縮寫:HTTP)是一種用於分佈式、協作式和超媒體訊息系統的應用層協定。HTTP是全球資訊網的資料通信的基礎。
設計 HTTP 最初的目的是為了提供一種發布和接收 HTML 頁面的方法。透過 HTTP 或者 HTTPS 協定請求的資源由統一資源識別碼(Uniform Resource Identifiers,URI)來標識。來源:維基百科

之前有提到 Protocol 是協定的意思,可以把協定看成「 規則,且這個規則是雙方需要遵守的格式、條件、資料標準 」,HTTP 就是一個網頁前後端在溝通時,必須遵守的一個規範,而他的使用範圍是全球資訊網路。

HTTP vs HTTPS

超文本傳輸安全協定(英語:HyperText Transfer Protocol Secure,縮寫:HTTPS;常稱為HTTP over TLS、HTTP over SSL或HTTP Secure)是一種透過計算機網路進行安全通訊的傳輸協定。HTTPS經由HTTP進行通訊,但利用SSL/TLS來加密封包。HTTPS開發的主要目的,是提供對網站伺服器的身分認證,保護交換資料的隱私與完整性。出自:維基百科

跟去上文 , S 是 Secure ,HTTPS 相較 HTTP 更安全,附上說明
HTTP不是安全的,而且攻擊者可以透過監聽和中間人攻擊等手段,取得網站帳戶和敏感訊息等。HTTPS的設計可以防止前述攻擊,在正確組態時是安全的。出自:維基百科

而 HTTP 是網路協定套組中,應用層的其中一個協定,每一層都有很多不同功能的協定。往後我們會提到網路協定套組中的每一層及每層包含哪些協定。

網際網路協議(英語:Internet Protocol Suite,縮寫IPS)
是一個網路通訊模型,以及一整個網路傳輸協定家族,為網際網路的基礎通訊架構。

常被通稱為TCP/IP協定套組(英語:TCP/IP Protocol Suite,或TCP/IP Protocols),簡稱TCP/IP。 出自:維基百科


HTTP request

提到 HTTP request ,我們就來模擬一下,「 假設我今天去 Google 首頁搜尋框打上:JavaScrit 並且按下 Enter,請說出從這一刻開始到我看到搜尋結果為止發生在背後的事情。」

預設我們使用的 DNS Server 是 google 提供 IP 位置為 8.8.8.8

前提 ( 瀏覽器到 google 首頁 )

  1. 瀏覽器一開始在網址欄中,輸入 google.com 這個域名
  2. 瀏覽器去 google 所提供的 DNS Server,IP 為 8.8.8.8,要求 google.com 這個域名實際的 IP 位置
  3. DNS Server 回傳 IP 為 172.217.160.78 給瀏覽器
  4. 瀏覽器接受到 response 後,瀏覽器發 Request 給 172.217.160.78 ,告訴他我要讀取他的 html、css、JavaScript 等文件
  5. 172.217.160.78 回傳文件內容
  6. 瀏覽器開始解析、渲染回傳的文件內容( 包含 html、css、JavaScript )
  7. 瀏覽器顯示 google.com 的頁面

上面步驟中瀏覽器發送 request 給 server ,這就是依據 HTTP ,而電腦、瀏覽器(只要是發送 request 要求的那一方),就稱為 client 。
如圖:
HTTP request圖片源自NET101 網路基礎概論


HTTP request % respond 傳什麼

  • client 與 Server,相互傳遞的格式,內容包含 「 headers 、 body 」
  • hearder 包含 request methods 動作 、code status 狀態碼、
  • body 主要為 method詳細要做什麼、文件內容

DNS Service

在 mac 的 termial 中有個nslookup ___域名___的指令,可以查詢該域名的 IP 位置


HTTP request method

對於 HTTP 來說這些名詞為動詞的用法,常見的用法為 GET、PUT、 POST、DELIETE、PATCH ,最常使用的方法則為 「 GET、 POST」,以下使用訂飲料會發生的事情作為範例:
情境:我在訂飲料的平台,準備要訂飲料給家人喝

GET:取得指定資源 (我要什麼菜單)

POST:提交指定資源的 body (我要訂多多綠 X 2、烏龍綠 X 1)

PUT:取代指定資料,(我不要多多綠、烏龍綠了,改梅子青茶 X 1、奶茶 X 1)

PATCH:取代部分指定資料 (我修改奶茶的數量,奶茶 X 3)

DELIETE:刪除指定資源 (我棄單)

HEAD:與 GET 用法相同,但只回傳 headers 的資料

OPTION:可查看該資料,可使用的 method


HTTP status code 狀態碼

狀態碼由三個數字組成,大致可以分為五種狀態,由第一個數字可先判斷是哪種狀態:

1 開頭 - request 已經接收,但 client 端需要進行一些處理,較少見
2 開頭 - 成功

  • 200 OK:最常見,表示請求成功
  • 204 No Content:request 成功,但沒有返回內容,ex.發 DELETE XX的 resquest,respond 狀態碼就會是204(刪除成功,但沒有資訊返回))

3 開頭 - 重新導向

  • 301 Moved Permanently:請求資源「 永久 」已搬家,當 request 回傳 301,他會紀錄最新的地址在哪裡,下次 request 就會讀取紀錄
  • 302 Found:請求資源「暫時」已搬家
    *

4 開頭 - 用戶端錯誤,ex.格式、語法錯誤、請求太大

  • 404 Not Found : 找不到資源

5 開頭 - 伺服器錯誤

  • 500 Internal Server Error : 找不到資源
  • 503 Service Unavailable : 臨時伺服器過載(搶票時)

總結

  1. HTTP 只是一個協定
  2. 瀏覽器只是一個程式,因此會有些限制,但這些限制僅止於瀏覽器上,並非 HTTP 或 Server 限制,

資料來源

  1. lidemy-NET101 網路基礎概論(搭配 JS 實作練習)
  2. miahsu-第六週 網路基礎-HTTP、Request、Response
  3. 維基百科-TCP/IP協定套組
  4. 維基百科-超文本傳輸協定
  5. 維基百科-HTTPS

#HTTP #HTTPS #request #respond #status code







Related Posts

How to solve the perpetual loading issue in Evernote? Evernote 一直轉圈圈的解決辦法

How to solve the perpetual loading issue in Evernote? Evernote 一直轉圈圈的解決辦法

Session 機制是甚麼碗糕

Session 機制是甚麼碗糕

Python 101 快速入門教學

Python 101 快速入門教學


Comments